package cn.itcast.web.servlet;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //1.设置request编码
        request.setCharacterEncoding("utf-8");
        //2.获取参数(这里先不使用map获取参数，稍后自己补充)
        String username=request.getParameter("username");
        String password=request.getParameter("password");
        String checkCode=request.getParameter("checkCode");
        //3.先获取CheckCodeServlet中生成并保存在session中的验证码
        HttpSession session=request.getSession();
        //这里需要将从session中获取的Object类型数据强制转化为字符串
        String  checkCode_session = (String) session.getAttribute("checkCode_session");
        //实现一次性验证码:即从session中获取到验证码后，就删除session
        session.removeAttribute("checkCode_session");
        System.out.println("程序生成的验证码:"+checkCode_session);
        System.out.println("用户输入的验证:"+checkCode);
        System.out.println("验证码验证结果:"+checkCode.equalsIgnoreCase(checkCode_session));
        //4.先判断验证码是否正确
        //验证码不区分大小写，所以需要使用不区分大小写的比较方法
        //另外避免验证码空指针异常
        if(checkCode_session!=null&&checkCode_session.equalsIgnoreCase(checkCode)){
            //如果验证码一致，判断用户名(这里将来是要调用UserDao查询数据库的，这里暂将写死)
            //如果用户名密码一致
            if("zhangsan".equals(username) && "123".equals(password)){
                //登录成功
                //存储信息，用户信息（因为是重定向，有两次请求，需要用session来存储）
                session.setAttribute("user",username);
                //重定向到success.jsp(重定向的两个资源数据共享即用户信息共享到succession.jsp中)
                //重定向的路径是给客户端使用的，所以需要获取虚拟目录(动态)。
                response.sendRedirect(request.getContextPath()+"/success.jsp");
            }else{
                //若用户名密码不一致，登录失败
                //存储信息到request域
                request.setAttribute("login_error","用户名或密码错误");
                //转发到登录页面
                request.getRequestDispatcher("/login.jsp").forward(request,response);
            }
        }else{
            //验证码不一致，登录失败
            //存储提示信息到request域(将来要将该数据传到客户端登录页面显示)
            request.setAttribute("cc_error","验证码错误");
            //转发到登录页面
            request.getRequestDispatcher("/login.jsp").forward(request,response);
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);
    }
}
